package appVeterinaria.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Collection;

import appVeterinaria.modelo.Cita;

import appVeterinaria.excepcion.DAOExcepcion;
import appVeterinaria.modelo.*;
import appVeterinaria.util.ConexionBD;

public class CitaDAO extends BaseDAO {
	
	public Collection<Cita> buscarPorCodigo(int idCita)
			throws DAOExcepcion {
		String query = "select idCita, fe_registro_cita, diagnostico,paciente_idPaciente, paciente_cliente_idCliente, doctor_idDoctor, receta from cita where idCita=?";
		Collection<Cita> lista = new ArrayList<Cita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCita);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cita vo = new Cita();
				vo.setIdCita(rs.getInt("idCita"));
				vo.setFecha_cita(rs.getString("fecha_registro_cita"));
				vo.setDiagnostico(rs.getString("diagnostico"));
				vo.getObjPaciente().setIdPaciente(rs.getInt("paciente_idPaciente"));
				vo.getObjPaciente().getObjCliente().setIdPersona(rs.getInt("idCliente"));
				vo.getObjDoctor().setIdPersona(rs.getInt("doctor_idDoctor"));
				vo.getObjPaciente().getHistoria().setReceta("receta");

				
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		//System.out.println(lista.size());
		return lista;
	}
	
	

	public Cita obtener(int idCita) throws DAOExcepcion {
		Cita vo = new Cita();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idCita, fe_registro_cita, diagnostico,paciente_idPaciente, paciente_cliente_idCliente, doctor_idDoctor, receta from cita where idCita=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCita);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdCita(rs.getInt(1));
				vo.setFecha_cita(rs.getString(2));
				vo.setDiagnostico(rs.getString(3));
				vo.getObjPaciente().setIdPaciente(rs.getInt(4));
				vo.getObjPaciente().getObjCliente().setIdPersona(rs.getInt(5));
				vo.getObjDoctor().setIdPersona(rs.getInt(6));
				vo.getObjPaciente().getHistoria().setReceta(rs.getString(7));
								
			}
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
	public void eliminar(int idCita) throws DAOExcepcion {
		String query = "delete from cita WHERE idCita=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCita);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public Cita actualizar(Cita vo) throws DAOExcepcion {
		String query = "update cita set fe_registro_cita=?, diagnostico=?, paciente_idPaciente=?, paciente_cliente_idCliente=?, doctor_idDoctor=?, receta=? where idCita=?";
		Connection con = null;
		PreparedStatement stmt = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			//stmt.setString(1, vo.getFecha_cita());
			/*stmt.setString(2, vo.getDiagnostico());
			stmt.setInt(3, vo.getObjPaciente().getIdPaciente());
			stmt.setInt(4, vo.getObjPaciente().getObjCliente().getIdPersona());	
			stmt.setInt(5, vo.getObjDoctor().getIdPersona());
			stmt.setString(6, vo.getObjPaciente().getHistoria().getReceta());
			*/
			stmt.setString(1, (String) vo.getFecha_cita());
			stmt.setString(2, (String) vo.getDiagnostico());
			stmt.setInt(3, (int) vo.getObjPaciente().getIdPaciente());
			stmt.setInt(4, (int) vo.getObjPaciente().getObjCliente().getIdPersona());
			stmt.setInt(5, (int) vo.getObjDoctor().getIdPersona());
			stmt.setString(6, (String) vo.getObjPaciente().getHistoria().getReceta());		
			
			
			
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	

	public Collection<Cita> listarCitas() throws DAOExcepcion {
		Collection<Cita> c = new ArrayList<Cita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select distinct fe_registro_cita, idCita, doctor_idDoctor, idServicio, des_servicio, diagnostico, idPaciente, nombre, idCliente, nombres, apellidos from citas_servicios, cita, servicios, paciente, cliente where citas_servicios.cita_idcita=cita.idCita and cita.paciente_idPaciente=paciente.idPaciente and cliente.idCliente=paciente.cliente_idCliente order by des_servicio;";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cita vo = new Cita();
				Servicio objServicio= new Servicio();
				CitaServicio objCitaServicio=new CitaServicio();
				Paciente objPaciente=new Paciente();
				Cliente objCliente=new Cliente();
				Doctor objDoctor=new Doctor();
				objPaciente.setIdPaciente(rs.getInt("idPaciente"));
				objPaciente.setNombre(rs.getString("nombre"));
				objCliente.setIdPersona(rs.getInt("idCliente"));
				objDoctor.setIdPersona(rs.getInt("doctor_idDoctor"));
				objCliente.setNombres(rs.getString("nombres"));
				objCliente.setApellidos(rs.getString("apellidos"));
				objPaciente.setObjCliente(objCliente);
				objServicio.setIdServicio(rs.getInt("idServicio"));
				objServicio.setDescripcion(rs.getString("des_servicio"));
				objCitaServicio.setObjServicio(objServicio);
				vo.setIdCita(rs.getInt("idCita"));
				vo.setObjPaciente(objPaciente);
				vo.setObjDoctor(objDoctor);
				vo.setFecha_cita(rs.getString("fe_registro_cita"));
				vo.setDiagnostico(rs.getString("diagnostico"));				
				
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
	
	 public Cita insertar(Cita vo) throws DAOExcepcion {
			System.out.println("CitaDAO: insertar(Cita vo)");
			String query = "INSERT INTO cita(idCita, fe_registro_cita, diagnostico, paciente_idPaciente, paciente_cliente_idcliente, doctor_idDoctor, receta) " +
					"VALUES (?,?,?,?,?,?,?)";
			Connection con = null;
			PreparedStatement stmt = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setInt(1, (int) vo.getIdCita());
				stmt.setString(2, (String) vo.getFecha_cita());
				stmt.setString(3, (String) vo.getDiagnostico());
				stmt.setInt(4, (int) vo.getObjPaciente().getIdPaciente());
				stmt.setInt(5, (int) vo.getObjPaciente().getObjCliente().getIdPersona());
				stmt.setInt(6, (int) vo.getObjDoctor().getIdPersona());
				stmt.setString(7, (String) vo.getObjPaciente().getHistoria().getReceta());
				
				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("No se pudo insertar");
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return vo;
		}


	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

}
